<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of Vivo
 *
 * @author sunday add 2014.5.28  modify by dragon.hu @2016.2.18
 */
require_once 'BaseChannel.php';

//Vivo
class Vivo implements BaseChannel {
	
function __construct() {
        //echo "construct";
    }

    //put your code here
    function android($data) {
    	$UID = "";
        $paymentKey = "565b811ae11363e26251561a85b5433e";        
        $ret = $this->paymentCallBack($paymentKey, ANDROID);
        //echo $ret;
        if($ret == 'success')
        {
			echo $ret;
        }else 
        {
        	header("HTTP/1.1 404 Not Found");
        	header("Status: 404 Not Found"); 
        }
		//var_dump($ret);
    }

    function ios($data) {
    	$UID = "";
        $paymentKey = "";        
		$ret = $this->paymentCallBack($paymentKey, IOS);
		echo $ret==true ? 1:0;
    }

	function paymentCallBack($paymentKey, $platform)
	{	
		$orderLog = new ChargeOrder();
		$orderLog->log("vivo", $_POST);
		
		ksort($_POST);
		$sign = $_POST['signature'];
		
		//print_r($_POST);
		
		//最终的结果
		$result = 'fail';
		
		if(empty($sign))
		{
			$result = 'fail signature is null';
			return $result;
		}
		
		//关键字排序
		$content = "";
		$i = 0;
		foreach($_POST as $key=>$value)
		{
		   if($key != "signature" && $key != 'signMethod' && $value != '' && $value != null)
		    {
			   $content .= ($i == 0 ? '' : '&').$key.'='.$value;
			   $i++;
			}
		   
		}
		//echo $content;
		//$thirdorderid = $_POST['vivoOrder'];	//第三方平台id
		$thirdorderid = $_POST['orderNumber'];	//第三方平台id
		//$myorderid = $_POST['storeOrder'];	//我方订单号
		$myorderid = $_POST['cpOrderNumber'];	//我方订单号
		$money = $_POST['orderAmount'];	//交易金额(单位分)
		//$respCode = $_POST['respCode'];	//交易码 0000，代表支付成功		
		$tradeStatus = $_POST['tradeStatus'];	//交易码 0000，代表支付成功
		
		$mysign= md5($content."&".strtolower(md5($paymentKey)));		
		
		//echo " mysign = $mysign sign = $sign ";
		if($mysign == $sign)
		{
			$status = STATUS_SUCCESS;
			if($tradeStatus != '0000')	//成功
			{
				$status = STATUS_FAILD;
			}
			 
			//进行发货
			if(false == $orderLog->recordOrder($status,  $money/100, $myorderid, "vivo", $platform,$thirdorderid))
			{
				$result = ' insert data error ';
				$orderLog->log("vivo",array("order"=>$myorderid,"money"=>$money,"result"=>$status,"serverresult"=>"faild"));
				
			}else 
			{
				//支付成功
				$result = 'success';
				$orderLog->log("vivo",array("order"=>$myorderid,"money"=>$money,"result"=>$status,"serverresult"=>"success"));
			}
		}
		else 
		{
			$result = 'sign fail';
		}
		
		return $result;
	}
	
	/*
	 * 请求viso订单号****************************不需要这一步了，放到客户端做  @2016.2.18******************************************
	 */
	function getorder()
	{
		//订单推送接口
		$url = 'https://pay.vivo.com.cn/vivoPay/getVivoOrderNum';
		$cpkey = '1785d27abb015f74c79fb9f752af8a08';	//密钥
		
		//print_r($_GET);
		
		$data = array();
		
		//公共参数
		$data['version']='1.0.0';	//接口版本号	
		
		//商户参数
		$data['storeId']='20140715170702634521';	//定长20位数字，在开发者平台注册获取
		$data['appId']='7cca45850d16c0d38eb826d797cae10d';	//应用ID，在开发者平台创建应用之后获取		
		$data['notifyUrl']='http://taitanpayment.yongshengmen.teamtop3.com/master/mcGM/Payment/Vivo/android';	//异步通知url
		
		$data['storeOrder']=$_GET['storeOrder'];	//商户自定义的订单号
		
		//业务参数
		$data['orderTime']=$_GET['orderTime'];	//交易开始日期时间	yyyyMMddHHmmss, 交易发生时的时间日期
		$data['orderAmount']=$_GET['orderAmount'];	//交易金额	单位：元，币种：人民币，必须精确到小数点后两位，如：0.01，100.00
		$data['orderTitle']=$_GET['orderTitle'];	//商品的标题
		$data['orderDesc']=$data['orderTitle'];	//订单描述
		
		//测试用的
		/*
		$data['orderTime']='20130913162237';	//交易开始日期时间	yyyyMMddHHmmss, 交易发生时的时间日期
		$data['orderAmount']='10.00';	//交易金额	单位：元，币种：人民币，必须精确到小数点后两位，如：0.01，100.00
		$data['orderTitle']='300钻石月度礼包';	//商品的标题
		$data['orderDesc']=$data['orderTitle'];	//订单描述 
		$data['storeOrder'] = '61db876d90fb4817a95893704e98ad07';	//订单号
		$data['notifyUrl']='http://127.0.0.1:8080/vivopay/vivoPay/testNotify';
		*/
		
		//关键字排序
		ksort($data);
		$content = "";
		$i = 0;
		//print_r($data);
		foreach($data as $key=>$value)
		{
			if($value == '' || $value == null || $key == 'signature')
			{
				//echo " value:$value key:$key continue";
				continue;
			}
			$content .= ($i == 0 ? '' : '&').$key.'='.$value;
			$i++;
		}
		//echo( " pre1 = ". $content);
		$str = $content."&".strtolower(md5($cpkey));
		//echo " pre2 = $str";
		
		$data['signature']=md5($str);	//签名信息		
		//echo ' pre3='.$data['signature'];
		
		$data['signMethod']='MD5';	//签名方法
		
		$ret = vpost($url,10,$data);
		echo $ret;
		//var_dump($ret) ;
		/*
		$receiveData = json_decode($ret,true);
		//print_r($receiveData);
		
		//收到 正确的消息
		
		if(200 == $receiveData['respCode'])
		{
		
		    respCode	响应码	成功返回：200，非200时，respMsg会提示错误信息。 
			respMsg	响应信息	对应响应码的响应信息
			当respCode=200时，下列参数有效
			signMethod	签名方法	对关键信息进行签名的算法名称：MD5
			signature	签名信息	对关键信息签名后得到的字符串1，用于商户验签，签名规则请参考附录 2.6.3 消息签名
			vivoSignature	vivoSDK需要的签名	对关键信息签名后得到的字符串2，vivoSDK使用
			vivoOrder	交易流水号	vivo订单号
			orderAmount	交易金额	单位：元，币种：人民币，必须精确到小数点后两位，如：1.01，100.00
		 
			echo $receiveData['vivoOrder'];
		}else 
		{
			echo "";
		}
		
		*/
		
	}
	
	/*
	 * 订单查询接口
	 */
	function queryorder()
	{
		//查询网址
		$url = 'https://pay.vivo.com.cn/vivoPay/queryVivoOrderNum';
		$cpkey = '1785d27abb015f74c79fb9f752af8a08';	//密钥

		$data = array();
		
		//公共参数
		$data['version']='1.0.0';	//接口版本号
		$data['signMethod']='MD5';	//签名方法			
		
		//商户参数
		$data['storeId']='20140715170702634521';	//定长20位数字，在开发者平台注册获
		$data['storeOrder']='61db876d90fb4817a95893704e98ad07';	//商户自定义的订单号
		
		//业务参数
		$data['vivoOrder']='vivoOrder';	//交易开始日期时间	yyyyMMddHHmmss, 交易发生时的时间日期
		$data['orderAmount']='1.0.0';	//交易金额	单位：元，币种：人民币，必须精确到小数点后两位，如：0.01，100.00

		//关键字排序
		ksort($data);
		$content = "";
		$i = 0;
		print_r($data);
		foreach($data as $key=>$value)
		{
			if($value == '' || $value == null || $key == 'signature')
			{
				echo " value:$value key:$key continue";
				continue;
			}
			$content .= ($i == 0 ? '' : '&').$key.'='.$value;
			$i++;
		}
		var_dump( $content);
		
		$data['signature']=md5($content."&".strtolower(md5($cpkey)));	//签名信息		
		echo 'signature='.$data['signature'];
		
		$ret = vpost($url,10,$data);
		var_dump($ret) ;
		$receiveData = json_decode($ret,true);
		print_r($receiveData);
		
		//收到 正确的消息
		if(200 == $receiveData['respCode'])
		{
			/*
		    respCode	响应码	成功返回：200，非200时，respMsg会提示错误信息。 
			respMsg	响应信息	对应响应码的响应信息
			当respCode=200时，下列参数有效
			signMethod	签名方法	对关键信息进行签名的算法名称：MD5
			signature	签名信息	对关键信息签名后得到的字符串1，用于商户验签，签名规则请参考附录 2.6.3 消息签名
			vivoSignature	vivoSDK需要的签名	对关键信息签名后得到的字符串2，vivoSDK使用
			vivoOrder	交易流水号	vivo订单号
			orderAmount	交易金额	单位：元，币种：人民币，必须精确到小数点后两位，如：1.01，100.00
		 */
			echo $receiveData['vivoOrder'];
		}else 
		{
			echo "error";
		}
	}
	
	
}
